Skip to content

Add omniborArtifactID/omniborArtifactType to product in affected array #410

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from

Conversation

alilleybrinker
Copy link

@alilleybrinker alilleybrinker commented May 9, 2025

The affected array is an array containing product objects, which must at minimum include an "identifier" (which may be a composite identifier composed of multiple fields) along with a set of version bounds or a default status. Products may also specify an assortment of additional fields which further constrain the applicability of the CVE to its intended target hardware or software.

Previously, the set of identifiers available were:

  • A vendor and product
  • A collectionURL and packageName

This commit adds support for a new pair of fields to support using OmniBOR Artifact IDs as identifiers in the affected array:

  • omniborArtifactID: The OmniBOR Artifact ID for an artifact.
  • omniborArtifactType: An enum indicating whether the omniborArtifactID is for an artifact to search in a file system for, or whether it's a build input to search against OmniBOR Input Manifests.

The commit also adds data constraints to ensure this new identifier pair is not used alongside fields that don't make sense to use with OmniBOR, including the other identifier schemes, further decomposition information like programFiles or programRoutines, and version information.

This work is submitted as an alternative formulation of the design proposed in the draft RFD on software identifiers 1, and as an alternative to the existing proposals for making the cpeApplicability structure generic 2 (instead of it being CPE-specific) and enhancing this new generic applicability structure with support for OmniBOR Artifact IDs 3.

If this change is accepted, then 2 and 3 should not be accepted.

The `affected` array is an array containing `product` objects, which
must at minimum include an "identifier" (which may be a composite
identifier composed of multiple fields) along with a set of version
bounds or a default status. Products may also specify an assortment
of additional fields which further constrain the applicability of the
CVE to its intended target hardware or software.

Previously, the set of identifiers available were:

- A `vendor` and `product`
- A `collectionURL` and `packageName`

This commit adds support for a new pair of fields to support
using OmniBOR Artifact IDs as identifiers in the `affected` array:

- `artifactID`: The OmniBOR Artifact ID for an artifact.
- `artifactType`: An enum indicating whether the `artifactID` is for
  an artifact to search in a file system for, or whether it's a
  build input to search against OmniBOR Input Manifests.

The commit also adds data constraints to ensure this new identifier
pair is not used alongside fields that don't make sense to use with
OmniBOR, including the other identifier schemes, further decomposition
information like `programFiles` or `programRoutines`, and version
information.

This work is submitted as an alternative formulation of the design
proposed in the draft RFD on software identifiers [1], and as an
alternative to the existing proposals for making the `cpeApplicability`
structure generic [2] (instead of it being CPE-specific) and enhancing
this new generic applicability structure with support for OmniBOR
Artifact IDs [3].

If this change is accepted, then [2] and [3] should not be accepted.

[1]: CVEProject#407
[2]: CVEProject#391
[3]: CVEProject#396

Signed-off-by: Andrew Lilley Brinker <[email protected]>
@alilleybrinker alilleybrinker changed the title Add artifactID/artifactType to affected array Add artifactID/artifactType to product in affected array May 9, 2025
@alilleybrinker
Copy link
Author

(This really applies to the RFD #407, but I am pasting it here as well for completeness)

Note

Final Comment Period

A Final Comment Period (FCP) has been called for this proposal. This is a final opportunity to raise new concerns with the proposal.

The FCP will close at 2pm PDT / 5pm EDT July 3rd, at the end of the Quality Working Group Meeting.

@zmanion
Copy link
Contributor

zmanion commented Jul 17, 2025

Sorry to completely ignore the FCP, in my defense this was discussed at the 2025-07-17 QWG meeting and is still not decided.

IIUC artifactID and artifactType indicate an OmniBOR "type" of affected object and not something more generic, right? My first thought is, if we're adding a new type (and I'm in favor of new product identification types, including OmniBOR), explicitly declare the type and design a structure that supports multiple types. Related, there was a comment that Maven uses artifactID in some way.

Rough example within .containers.cna.affected

{
  "vendor": "Example.org",
  "product": "Example Enterprise",
  "defaultStatus": "affected",
  "identifierType": "OmniBOR",
  "identifierSpecific:" {
    "artifactID": "gitoid:blob:sha256:fee53a18d32820613c0527aa79be5cb30173c823a9b448fa4817767cc84c6f03",
    "artifactType": "artifact"
  }
}

@alilleybrinker
Copy link
Author

I would argue that the design had been decided, hence the FCP, and that yesterday's QWG meeting was relitigating a number of issues which had been covered in prior meetings and in the issue tracker.

That said, I will be renaming the fields to include "omnibor" in the name, per the discussion in yesterday's meeting.

As for the specific concept proposed here for new identifiers, I do think this would be inconsistent with existing "identifier pair types" like vendor and product or collectionURL and packageName, which appear together per the constraints on the object type. It's not clear to me why we'd do this grouping for new identifiers when we don't do it for existing ones. As proposed, it would also mean you could use only one "new identifier" within the product object, since you can't repeat fields in a JSON object.

@zmanion
Copy link
Contributor

zmanion commented Jul 18, 2025

Thanks and I realize I'm behind in the discussion and decisions on this and am contributing to relitigation, which is generally bad form. I suspect adding "omnibor" to field names addresses my short term concern, and longer term, my concerns fall up to an overhaul of the (poorly named) affected object. At a requirement level, I'd want something like "at least one type of identifier from an approved list plus zero or more additional identifiers that mean entirely or substantially the same thing." In my example JSON above, that could be an array of identifierType elements.

To be clear, my comments are not meant to block merging this PR, subject to whatever additional changes are in flight.

@alilleybrinker
Copy link
Author

Thanks, and I agree there's a need to do a larger rework of the affected array in a future 6.0.0 version of the Record Format!

Per QWG discussions on 7/10 and 7/17, this updates the names
of the OmniBOR fields to use the word "omnibor" in them, and
also updates the data constraints to ensure 1) that both
OmniBOR fields are used together if used, and 2) that extra
fields which do not make sense in the context of a fine-grained
identifier are not mixed in.

This also adds some descriptions and comments to make this part
of the schema clearer to other contributors.

Signed-off-by: Andrew Lilley Brinker <[email protected]>
@alilleybrinker alilleybrinker changed the title Add artifactID/artifactType to product in affected array Add omniborArtifactID/omniborArtifactType to product in affected array Jul 21, 2025
@alilleybrinker
Copy link
Author

The field names and constraints have been updated to reflect the changes discussed in the last two QWG meetings.

@alilleybrinker
Copy link
Author

Ah, it appears the older version of the JSON Schema spec we use doesn't support "dependentRequired" constraints, so I'll have to reformulate that constraint using the older mechanisms. I'll make a commit that corrects the error.

It would also be nice if it were easier to catch these kinds of issues locally.

The prior commit introduced a constraint using the field name
'dependentRequired', but the CVE Record Format is using an older
form of the JSON Schema specification, where that field name is
not used.

This amends the schema to use the older "dependencies" constraint
type, which behaves equivalently for our purposes.

Signed-off-by: Andrew Lilley Brinker <[email protected]>
This amends the data constraints on the "product" object
inside the "affected" array, permitting the "platforms" field,
which CNAs can use to indicate what platform an identified
binary is intended to run on.

Signed-off-by: Andrew Lilley Brinker <[email protected]>
@ElectricNroff
Copy link

"enum": ["artifact", "buildInput"],
"description": "Specifies how consumers of the Artifact ID should search for matches. If the 'target' is 'artifact', then the Artifact ID is identifying an artifact which should be searched for directly (for example, within a file system by matching against Artifact IDs for files). If the 'target' is 'build_input' then the Artifact ID is identifying a build input, and consumers should match the Artifact ID against IDs found in OmniBOR Input Manifests for their software."

line 410 says buildInput but line 411 says: If the 'target' is 'build_input' (the latter seems to be a minor documentation anomaly)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants